Embeddings APIを理解する
1: 結局はプロンプトに情報を含めるゲー
2: 情報をAPIなどから取ってくるようにすれば、情報を取ってきた上でChatGPT.iconに投げるみたいなフローも実現できる
3: で、問題は、プロンプトサイズに限界があるので、情報全部(知識全部)を渡せない
どうするか
大量の情報からユーザーの入力に関連する情報を抽出するためのエンべディング(Embedding)という手法です。
「質問に関連した内容」を大量の独自データから取り出すにはどうしたらいいでしょう?そこで活用されているのがベクトルデータベースと呼ばれるものです。
ああ、そういうことかsta.icon
a: 自分が用意した大量データ
b: 自分が書いた質問
aの中から、bに関連したデータだけを厳選して取り出したい
なぜならプロンプトサイズが限られているから
この取り出しはChatGPT.iconでしか行えないと思ってたけど、それを実現するのがEmbedding APIだったりLhamaIndexだったりするわけね
別の言い方をするとこの処理はローカルでChatGPTを使わずに経由せずに行えるいいえ
LhamaIndexも最終的にEmbedding API呼び出してる。ラッパーなのよsta.icon
実はChatGPTのモデルの性能だけでなく、その手前で独自データから精度の高いベクトルデータベースをつくれるか、ユーザーの入力文をもとにそのベクトルデータベースから精度高く関連情報を抽出できるかがとても重要になるということです。
ああ、思い出してきた
でもembedding apiも結局一度に最大トークンサイズ分しか送れない。ただし何度でもできるので何度でもやって少しずつベクトルインデックスをつくっていけばいい。sccでも何度も何度も試行してたよな。で、pickleつくったやろ
あとはプロンプトつくるときに、このベクトルインデックスから質問に関連する部分を(プロンプトサイズ脱しない程度に)抽出する処理をやればいい